﻿using System;
using System.Collections.Generic;
using Vallejos.Entidades.Enums;
using Vallejos.Entidades.Interfaces;
using Vallejos.Entidades.ModeloDeDatos;
using Vallejos.Datos.Accesos;


namespace Vallejos.Negocio
{
    public class PrestamoBLL : IPrestamo
    {
        private readonly PrestamoDAL _prestamo;
        private readonly EnvioCorreosBLL _envioCorreos;
        private readonly SeguridadBLL _seguridad;
        private readonly HelperCache _cache;

        public string UrlPath { get; set; }
        public PrestamoBLL()
        {
            _envioCorreos = new EnvioCorreosBLL();
            _seguridad = new SeguridadBLL();
            _prestamo = new PrestamoDAL();
            _cache = new HelperCache();
        }

        

        public SolicitudDePrestamo GenerarSolicitudDePrestamo(SolicitudDePrestamo solicitud)
        {
            throw new NotImplementedException();
        }

        public SolicitudDePrestamo GenerarSolicitudDePrestamo(SolicitudDePrestamo solicitud, int idLenguaje)
        {
            solicitud = _prestamo.GenerarSolicitudDePrestamo(solicitud);

            var ejecutivos = _seguridad.BuscarPersonas(new EmpleadoBancario
            {
                Ambito = new Ambito { IdAmbito = IdAmbito.Banco }
            }, idLenguaje);

            solicitud.EjecutivoEncargado = (EmpleadoBancario)ejecutivos[new Random().Next(0, ejecutivos.Count - 1)];

            _prestamo.AsignarEjecutivoDeSolicitud(solicitud);

            _envioCorreos.NotificarAsignacionDeEjecutivo(solicitud, UrlPath);

            return solicitud;
        }

        public List<EstadoDePrestamo> LeerEstadosDePrestamo(int idLenguaje)
        {
            return _cache.ObtenerLista<EstadoDePrestamo>() ?? _cache.SetearLista(_prestamo.LeerEstadosDePrestamo(idLenguaje));
        }

    }
}
